package com.zqh.meta;

import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.ReflectUtil;
import cn.hutool.json.JSON;
import cn.hutool.json.JSONUtil;

public class MetaManager {

    private static volatile Meta meta;

    private MetaManager(){}

    // 双检锁单例模式
    public static Meta getMetaObject(){
        // 第一次检查，如果实例已经创建，则直接返回，避免不必要的同步
        if(meta == null){
            // 同步代码块，确保同一时间只有一个线程可以执行下面的代码
            synchronized (MetaManager.class){
                // 第二次检查，防止多个线程同时通过第一次检查后创建多个实例
                if(meta == null){
                    // 初始化实例
                    meta = initMeta();
                }
            }
        }
        // 返回实例
        return meta;
    }


    /*  实例化Meta，并赋值json的信息
        和校验合法性
    */
    private static Meta initMeta(){

//        String metaJson = ResourceUtil.readUtf8Str("meta.json");
        String metaJson = ResourceUtil.readUtf8Str("springboot-init-meta.json");
        Meta newMeta = JSONUtil.toBean(metaJson, Meta.class);
        // 校验默认值
        MetaValidator.doValiteAndFill(newMeta);

        System.out.println(newMeta.getFileConfig());

        return newMeta;
    }

//
//    public static void main(String[] args) {
//       Meta newMeta =   initMeta();
//        System.out.println(newMeta);
//
//    }

}
